<?php

/*
*打印数据
*/
function p($data = [])
{
    echo '<pre>';
    print_r($data);
    echo '</pre>';
}

/*
*打印数据并退出
*/
function pp($data = [])
{
    p($data);
    exit;
}


/* 转换json */
function tojson($data)
{
    return json_encode($data, JSON_UNESCAPED_UNICODE);
}

/*
* 返回并退出
*/
function out($data = [], $code = 0, $msg = 'ok')
{
    $response = \Yii::$app->getResponse();
    $response->format = \yii\web\Response::FORMAT_JSON;
    $response->data = [
        'code' => $code,
        'msg' => $msg,
        'data' => $data,
    ];
    return $response;
}

/**
 * layui_page 分页
 * */
function layui_page($code = 0, $data = [], $msg = 'ok')
{
    $response = \Yii::$app->getResponse();
    $response->format = \yii\web\Response::FORMAT_JSON;
    $response->data = [
        'code' => $code,
        'msg' => $msg,
        'data' => $data['data'],
        'count' => $data['count'],
    ];
    return $response;
}

// api 接口输出并退出
function output($data = [], $code = 0, $msg = 'ok')
{
    header("Content-Type: application/json"); // 加入json 头
    echo tojson([
        'code' => $code,
        'msg' => $msg,
        'data' => $data,
    ]);
    exit;
}

/**
 * json 转数组
 * */
function JsonToArray($json, $assoc = true)
{
    $array = json_decode($json, $assoc);
    if (json_last_error() != 0) {
        return []; // 防止极端错误
    }
    return $array;
}

/**
 * 数组转json
 * */
function ArrayToJson($array)
{
    if (!is_array($array)) {
        $array = []; // 防止极端错误
    }
    return json_encode($array, JSON_UNESCAPED_UNICODE);
}

    
if (!function_exists('input')) {
    /**
     * 接收参数 （接收get post body体json数据）统一为一个数组
     **/
    function input($key = '', $value = null)
    {
        // 接收参数
        $request = Yii::$app->request;
        $post = $request->post();
        $get = $request->get();
        $input = file_get_contents('php://input'); // body 体

        if ($input) {
            $input = json_decode($input, true);
            if (json_last_error() != 0) {
                parse_str($input, $input);
            }
        }
        // 有值数据合并
        $data = [];
        if ($post) {
            $data = array_merge($data, $post);
        }
        if ($get) {
            $data = array_merge($data, $get);
        }
        if ($input) {
            $data = array_merge($data, $input);
        }
        // 去除前后空格
        $temp = [];
        foreach ($data as $k => $v) {
            $temp[$k] = is_array($v) ? $v : trim($v);
        }
        $data = $temp;
        // 设置默认值（返回单个）
        if ($key) {
            return isset($data[$key]) ? $data[$key] : $value;
        }

        // 返回
        return $data;
    }
}

if (!function_exists('say_errors')) {

    function say_errors($model)
    {
        $errorMsg = "";
        $errors = $model->getErrors();

        foreach ($errors as $field => $error) {
            $msg = implode(", ", $error);
            $errorMsg .= "{$field}:{$msg}";
        }

        return $errorMsg;
    }
}

/**
 *  日志打印
 * */
function print_log($data = [], $category = 'input', $level = 'info')
{
    \Yii::getLogger()->log($data, \yii\log\Logger::LEVEL_INFO, $category);
}

/**
 * send http request
 * @param  array $rq http请求信息
 *                   url        : 请求的url地址
 *                   method     : 请求方法，'get', 'post', 'put', 'delete', 'head'
 *                   data       : 请求数据，如有设置，则method为post
 *                   header     : 需要设置的http头部
 *                   timeout    : 请求超时时间
 * @param int $param 0 不打印，1 打印数据，2 打印数据并退出
 * @return string    http请求响应
 */
function send($array, $print = 0)
{
    // 输入参数
    $array['url'] = $array['url'];
    $array['method'] = strtoupper($array['method']);
    $array['data'] = isset($array['data']) ? $array['data'] : [];
    $array['header'] = isset($array['header']) ? $array['header'] : [];
    $array['timeout'] = isset($array['timeout']) ? $array['timeout'] : 50;

    // 如何打印输入数据
    if ($print == 1) {
        p($array);
    } else if ($print == 2) {
        pp($array);
    }

    // 请求
    $curl = curl_init($array['url']);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 不直接输出
    curl_setopt($curl, CURLOPT_TIMEOUT, $array['timeout']);  // 超时时间
    isset($array['header']) && curl_setopt($curl, CURLOPT_HTTPHEADER, $array['header']); // header 头信息
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $array['method']); // 请求方法
    isset($array['data']) && curl_setopt($curl, CURLOPT_POSTFIELDS, $array['data']); // 请求数据
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查  
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);  // 从证书中检查SSL加密算法是否存在  
    $data = curl_exec($curl);// 发送数据
    curl_close($curl);

    // 返回数据
    return $data;
}

/**
 *  验证
 * */
function csrf()
{
//    $_csrf = Yii::$app->params['csrfParam'];
    $_csrf = '_csrf-backend';
    $token = Yii::$app->request->csrfToken;
    echo '<input type="hidden" name="' . $_csrf . '"  value="' . $token . '">';
}
